<?php if (!defined('BASEPATH')) exit('No direct script access allowed');

class Template {

    public function __construct() {
        $this->_CI = get_instance();
    }
    var $template_data = array();
    

    /**
     * Permite setar variaveis dinâmicamente
     * 
     * @param string nome da variável
     * @param string valor da variável
     */
    function set($name, $value) {
        $this->template_data[$name] = $value;
    }
    
    /**
     * Remover uma variavel já setada no template
     * 
     * @param string $name
     */
    function unset_var($name) {
        unset($this->template_data[$name]);
    }

    /**
     * Carrega o template com a view desejada
     * 
     * @param string Nome do template
     * @param string Nome da view onde será carregada dentro do template  
     * @param string Dados que serão enviados para view
     * @param bool   Permite alterar o comportamento da função para que ela retorne dados como uma string ao invés de enviá-lo para o seu navegador. <b>O valor default é FALSE</b>.
     * @param bool   Ativa ou desativa o parser. <b>O valor default é TRUE</b>.
     * @return void
     */
    function load($template = NULL, $view = NULL, $view_data = array(), $return = FALSE, $parser = FALSE) {
        $this->CI = & get_instance();
        $view_data['url_base'] = base_url();
        if (!$parser) {
            $this->set('contents', $this->CI->load->view($view, $view_data, TRUE));
            return $this->CI->load->view($this->getTemplate($template), $this->template_data);
        } else {
            $this->set('contents', $this->CI->parser->parse($view, $view_data, TRUE));
            return $this->CI->parser->parse($this->getTemplate($template), $this->template_data, $return);
        }
    }

    /**
     * Seta os arquivos css
     * 
     * @param array nome dos arquivos
     */
    function load_css($files) {
        $this->set('content_css', $this->createCSSLinks($files));
    }

    /**
     * Seta os arquivos javascript
     * 
     * @param array nome dos arquivos
     */
    function load_js($files) {
        $this->set('content_js', $this->createJSLinks($files));
    }

    /**
     * Gera os links CSS utilizados no layout.
     *
     * @return void
     */
    private function createCSSLinks($links) {
        $html = "";

        for ($i = 0; $i < count($links); $i++) {
            $html .= "<link rel='stylesheet' type='text/css' href='" . base_url('assets/css') . '/' . $links[$i] . ".css' media='screen' />";
        }

        return $html;
    }

    /**
     * Gera os links JS utilizados no layout.
     *
     * @return void
     */
    private function createJSLinks($links) {
        $html = "";

        for ($i = 0; $i < count($links); $i++) {
            $html .= "<script type='text/javascript' src='" . base_url('assets/js') . '/' . $links[$i] . ".js'></script>";
        }

        return $html;
    }
    
    /**
     * Retorna o nome do template. 
     * Caso o mesmo não for passado por parâmetro o default que estar no <b>Config</b> é retornado.
     * 
     * @param  string Nome do template
     * @return string Nome do template a ser carregado
     */
    private function getTemplate($template) {
        return $template == NULL ? $this->CI->config->item('template') : $template;
    }

}

/* End of file Template.php */
/* Location: ./system/application/libraries/Template.php */